package com.weaving.monitor.mapper;

import com.weaving.monitor.dto.ProdCardTimeInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 生产卡片数据访问接口
 * 
 * 功能说明：
 * 1. 提供对prod_prod_card表的数据库操作
 * 2. 查询当前运行的生产卡片信息
 * 3. 为机器详情页面提供生产卡片数据
 * 
 * 注解说明：
 * - @Mapper: MyBatis注解，标识这是一个Mapper接口
 * 
 * 主要功能：
 * 1. 根据机器ID查询当前运行的生产卡片ID
 * 2. 查询生产卡片的基本信息
 * 3. 为工艺/疵点详情提供数据支持
 * 
 * @author 系统开发团队
 * @version 1.0
 * @since 2024-01-01
 */
@Mapper
public interface ProdProdCardMapper {


    /**
     * 根据机器ID查询当前运行的生产卡片ID
     *
     * 功能说明：
     * 1. 查询指定机器当前正在运行的生产卡片ID
     * 2. 查询条件：status='1' and machine_id=指定的机器ID
     * 3. 返回生产卡片ID，用于工艺/疵点详情显示
     *
     * SQL语句：
     * SELECT id FROM prod_prod_card WHERE status='1' AND machine_id=#{machineId}
     *
     * @param machineId 机器ID，格式如J001
     * @return 生产卡片ID，如果查询不到则返回null
     */
    String selectProcessCardIdByMachineId(@Param("machineId") String machineId);

    /**
     * 根据机器ID查询当前运行的生产卡片起始时间和结束时间
     *
     * 功能说明：
     * 1. 查询指定机器当前正在运行的生产卡片的起始时间和结束时间
     * 2. 查询条件：status='1' and machine_id=指定的机器ID
     * 3. 返回包含起始时间和结束时间的对象
     *
     * SQL语句：
     * SELECT startDate, endDate FROM prod_prod_card WHERE status='1' AND machine_id=#{machineId}
     *
     * @param machineId 机器ID，格式如J001
     * @return 包含起始时间和结束时间的对象，如果查询不到则返回null
     */
    ProdCardTimeInfo selectProcessCardTimeByMachineId(@Param("machineId") String machineId);

    /**
     * 根据机器ID和状态查询生产卡ID
     *
     * 功能说明：
     * 1. 查询指定机器和状态的生产卡ID
     * 2. 查询条件：machine_id=指定的机器ID and status=指定的状态
     * 3. 返回生产卡ID，用于疵点查询
     *
     * @param machineId 机器ID，格式如J001
     * @param status 状态，如'1'表示正在生产
     * @return 生产卡ID，如果查询不到则返回null
     */
    String selectCardIdByMachineIdAndStatus(@Param("machineId") String machineId, @Param("status") String status);

    /**
     * 根据生产卡ID获取物料名称
     *
     * 功能说明：
     * 1. 通过生产卡ID关联查询物料类型名称
     * 2. 查询路径：prod_prod_card -> prod_prod_order -> mat_cloth_type
     * 3. 返回物料类型名称，用于生产报表显示
     *
     * SQL语句：
     * SELECT t.name FROM prod_prod_card c
     * LEFT JOIN prod_prod_order o ON c.order_id=o.id
     * LEFT JOIN mat_cloth_type t ON t.id=o.mat_type_id
     * WHERE c.id=#{cardId}
     *
     * @param cardId 生产卡ID，如'J250827005'
     * @return 物料类型名称，如果查询不到则返回null
     */
    String selectMaterialNameByCardId(@Param("cardId") String cardId);
} 